package design.patterns.behavioral.templatemethod;

/**
 * @author gjx
 * @version v1.0
 * @Description
 * @date 2019/4/10 11:45
 */

/**
 *  定义一个操作中算法骨架，而将一些步骤延迟到子类中。
 *  模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
 *  主要解决：一些方法通用，却在每一个子类都重新写了这一方法
 *  使用场景： 1、有多个子类共有的方法，且逻辑相同。 2、重要的、复杂的方法，可以考虑作为模板方法
 */
public class Client {
    public static void main(String[] args) {
       /* function1();
        function2();*/
        CustomCalculator customCalculator = new MyCustomCalculator1();
        customCalculator.doCalculate(1,2);
        System.out.println("-----------------");
        CustomCalculator customCalculator2 = new MyCustomCalculator2();
        customCalculator2.doCalculate(1,2);



    }

    private static void function2() {
       int a = SUM(1,2);
       show(a);
       save(a);
    }

    private static void save(int a) {
        System.out.println("存储"+a);
    }

    private static void show(int a) {
        System.out.println("展示"+a);
    }

    private static int SUM(int i, int i1) {
        return i+i1;
    }

    private static void function1() {
        int a = SUM(1,2);
        save(a);
    }
}
